// 分页相关变量
let page = 1; // 当前页码
let pageSize = 6; // 每页显示数量（默认6条）
const self = $.cookie("studentName"); // 从cookie获取用户信息
let totalData = 0; // 总数据量
let totalPages = 0; // 总页数
let type;   //试卷类型（用来筛选试卷是来自老师还是学生笔记）
let currenttime;
let pollTimer;  //设置定时器，不断发送请求来改变考试状态
let pollTimerShowStatus;

// 格式化当前时间为 "yyyy-MM-dd HH:mm:ss" 格式
function getFormattedTime() {
    const date = new Date(); // 获取当前时间

    // 获取年、月、日（月份需+1，因为getMonth()返回0-11）
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0'); // 补零确保两位数
    const day = String(date.getDate()).padStart(2, '0');

    // 获取时、分、秒
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');

    // 拼接成目标格式
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

// 使用示例
currenttime = getFormattedTime();
// console.log("当前的时间为：" + currenttime);

// 页面加载完成后初始化
$(document).ready(function() {
    // 初始化事件绑定
    bindEvents();
    // 加载第一页数据
    showExamInfoByPage();
    // 获取总数量并生成分页按钮
    getExamCount();
    // 开始轮询
    startPolling();
});

/**
 * 绑定所有页面事件
 */
function bindEvents() {
    // 筛选下拉框事件
    $('#filterSelect').on('change', function() {
        type = $(this).find('option:selected').text();
        // 重置页码为1，重新加载数据
        page = 1;
        showExamInfoByPage(); // 传入筛选类型
        getExamCount(); // 传入筛选类型重新计算分页
    });

    // 页码按钮点击事件
    $(document).on("click", ".page-number .page_num", function() {
        page = parseInt($(this).data('page'));
        showExamInfoByPage();
        updatePaginationStatus(); // 更新分页按钮状态
    });

    // 上一页
    $(document).on("click", ".front", function() {
        if (page > 1) {
            page--;
            showExamInfoByPage();
            updatePaginationStatus();
        }
    });

    // 下一页
    $(document).on("click", ".next", function() {
        if (page < totalPages) {
            page++;
            showExamInfoByPage();
            updatePaginationStatus();
        }
    });

    // 首页
    $(document).on("click", ".first", function() {
        if (page !== 1) {
            page = 1;
            showExamInfoByPage();
            updatePaginationStatus();
        }
    });

    // 尾页
    $(document).on("click", ".end", function() {
        if (page !== totalPages) {
            page = totalPages;
            showExamInfoByPage();
            updatePaginationStatus();
        }
    });

    // 页容量切换
    $(document).on("change", ".page-size-select", function() {
        pageSize = parseInt($(this).val());
        page = 1; // 重置为第一页
        showExamInfoByPage();
        getExamCount(); // 重新计算总页数
    });

    // 页码跳转
    $(document).on("click", ".change", function() {
        const targetPage = parseInt($(".page-input").val());
        // 验证页码有效性
        if (!isNaN(targetPage) && targetPage >= 1 && targetPage <= totalPages) {
            page = targetPage;
            showExamInfoByPage();
            updatePaginationStatus();
        } else {
            alert("请输入有效的页码（1-" + totalPages + "）");
        }
        // 清空输入框
        $(".page-input").val("");
    });

    // 回车键跳转页码
    $(document).on("keypress", ".page-input", function(e) {
        if (e.which === 13) {
            $(".change").click(); // 触发跳转按钮点击事件
        }
    });

    // 点击考试卡片，打开弹出层
    $(document).on("click", ".exam-card", function () {
        // 获取考试卡片上的数据
        const name = $(this).find('p:contains("考试名称")').text().split('：')[1].trim();
        const createtime = $(this).find('p:contains("发布时间")').text().split('：')[1].trim();
        const examtime = $(this).find('p:contains("开始时间")').text().split('：')[1].trim();
        const duration = $(this).find('p:contains("考试时长")').text().split('：')[1].trim();
        const status = $(this).find('.exam-status').text().trim();
        const creator = $(this).find('p:contains("发布者")').text().split('：')[1].trim();

        // 将数据渲染到弹出层
        $("#modalExamName").text(name);
        $("#modalCreatetime").text(createtime);
        $("#modalExamtime").text(examtime);
        $("#modalDuration").text(duration);
        $("#modalStatus").text(status);
        $("#modalCreator").text(creator);
        $.cookie("duration",duration)
        $.cookie("examtime", examtime)
        // 控制弹出层显示
        $("#examModal").css("display", "flex");

        // 根据状态控制“进入考试”按钮是否可用
        const enterBtn = document.getElementById("enterExamBtn");
        if (status === '进行中' || self === creator) {
            enterBtn.disabled = false;
            enterBtn.style.backgroundColor = "#28a745";
            enterBtn.onclick = function () {
                window.location.href = "StudentExam";
            };
        } else {
            enterBtn.disabled = true;
            enterBtn.style.backgroundColor = "#ccc";
            enterBtn.onclick = null;
        }

        // 调用获取考试ID逻辑
        getExamIdByInfo(name, examtime, createtime, creator);
    });
}

/**
 * 分页展示考试信息
 */
function showExamInfoByPage() {
    $.ajax({
        url: "/MyExam/ShowExamInfoByPage",
        type: "post",
        dataType: "json",
        data: {
            page,
            pageSize,
            self,
            type,
            currenttime
        },
        success: function(res) {
            console.log("考试列表数据：", res);
            const arr = res.data || [];
            $(".exams-container").empty();

            // 无数据时显示提示
            if (arr.length === 0) {
                $(".exams-container").append(`
                    <div style="width: 100%; text-align: center; padding: 40px 0;">
                        <p>暂无符合条件的考试信息</p>
                    </div>
                `);
                return;
            }

            // 渲染考试卡片
            arr.forEach(item => {
                // 处理状态样式（进行中/未开始）
                const statusClass = item.status === '进行中' ? 'status-active' : 'status-inactive';
                // 处理分数显示，值为 item.score，若为 null/undefined 显示 '未作答'
                const scoreText = item.score != null ? item.score : '未作答';
                $(".exams-container").append(`
                    <div class="exam-card" data-status="${item.status}">
                        <!-- 新增：右上角分数显示 -->
                        <div class="exam-score">分数：${scoreText}</div> 
                        <h3>${item.name}</h3>
                        <p>考试名称：${item.name}</p>
                        <p>发布时间：${item.createtime || '未设置'}</p>
                        <p>开始时间：${item.examtime || '未设置'}</p>
                        <p>考试时长：${item.duration}分钟</p>
                        <span class="exam-status ${statusClass}">${item.status}</span>
                        <p>发布者：${item.creator}</p>
                    </div>
                `);
            });
        },
        error: function() {
            alert("获取考试信息失败，请联系管理员");
        }
    });
}

/**
 * 获取考试总数并生成分页按钮
 */
function getExamCount() {
    $.ajax({
        url: "/MyExam/GetExamCount",
        type: "post",
        dataType: "json",
        data: {
            self,
            type
        },
        success: function(res) {
            console.log("考试总数数据：", res);
            if (res.code === 200) {
                totalData = res.data;
                totalPages = Math.ceil(totalData / pageSize) || 1; // 计算总页数
                renderPagination(); // 生成分页按钮
                updatePaginationStatus(); // 更新分页状态
            } else {
                alert("获取考试数量失败：" + (res.msg || "未知错误"));
            }
        },
        error: function() {
            alert("获取考试数量失败，请联系管理员");
        }
    });
}

/**
 * 生成分页按钮（含省略号逻辑）
 */
function renderPagination() {
    $(".page-number").empty();

    for (let j = 1; j <= totalPages; j++) {
        // 处理省略号逻辑（总页数>5时优化显示）
        if (totalPages > 5) {
            // 中间页隐藏逻辑：只显示前2页、后2页和当前页附近
            if (j > 2 && j < totalPages - 1 && j !== page && j !== page - 1 && j !== page + 1) {
                if (j === 3) {
                    $(".page-number").append(`<span>...</span>`);
                }
                continue;
            }
        }

        // 渲染页码按钮
        const activeClass = j === page ? "active" : "";
        $(".page-number").append(`
            <button class="page-btn page_num ${activeClass}" data-page="${j}">${j}</button>
        `);
    }
}

/**
 * 更新分页按钮状态（禁用/激活）
 */
function updatePaginationStatus() {
    // 更新页码激活状态
    $(".page_num").removeClass("active");
    $(`.page_num[data-page="${page}"]`).addClass("active");

    // 更新翻页按钮禁用状态
    if (page === 1) {
        $(".first, .front").addClass("disabled");
    } else {
        $(".first, .front").removeClass("disabled");
    }

    if (page === totalPages) {
        $(".next, .end").addClass("disabled");
    } else {
        $(".next, .end").removeClass("disabled");
    }
}

/**
 * 获取考试ID并存储到Cookie
 */
function getExamIdByInfo(name, examtime, createtime, creator) {
    $.ajax({
        url: "/MyExam/GetExamIdByInfo",
        type: "post",
        async: false,
        contentType: "application/json",
        dataType: "json",
        data: JSON.stringify({
            name,
            examtime,
            createtime,
            creator
        }),
        success: function (res) {
            console.log(res)
            let examId = res.data.id
            // 清空原来的 examId Cookie
            clearCookie("examId");
            if (examId) {
                // 调用 setCookie 函数，将考试 ID 存入 Cookie，设置7天过期
                setCookie("examId", examId, 7);
            } else {
                console.warn("获取到的考试 ID 为空");
            }
        },
        error: function () {
            alert("获取考试id失败，请联系管理员")
        }
    })
}

// 设置 Cookie 的函数
function setCookie(name, value, days) {
    let expires = "";
    if (days) {
        const date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + (value || "")  + expires + "; path=/";
}

// 清除 Cookie 的函数
function clearCookie(name) {
    document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
}

// 关闭弹出层函数
function closeModal() {
    $("#examModal").css("display", "none");
}

/**
 * 轮询函数，发送请求获取所有考试的信息
 */

function getAllExamStatus() {
    $.ajax({
        url: "/MyExam/getAllExamInfoByName",
        type: "post",
        dataType: 'json',
        data:{
            name:self
        },
        success: function(res) {
            console.log("动态查询当前所有考试的信息(除了已存档的考试)：");
            console.log(res);
        },
        error: function() {
            // console.log(self)
            // alert("轮询获取所有考试信息失败，请联系管理员")
        }
    });
}

// 开始轮询
function startPolling() {
    getAllExamStatus();
    showExamInfoByPage();
    // 设置定时器，1000 毫秒 = 1 秒
    pollTimer = setInterval(getAllExamStatus, 1000);
    pollTimerShowStatus = setInterval(showExamInfoByPage, 1000);
}

// 停止轮询：清除定时器
function stopPolling() {
    clearInterval(pollTimer);
}
